281 floating window host: UI automation name #291
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixed #281
Location: LayoutFloatingWindowControl.cs
The issue was fixed by specifying the UI Automation name for the root visual in the host control. This causes the GenericRootAutomationPeer to default to getting that value instead of trying to use the Win32 API to get the value of a (possibly disposed) window.
I was not able to figure out how to solve the root cause which is caused by GCHandles to the Border (RootVisual) still hanging around after the window is closed. Since the UI Automation uses WeakReferences to check which elements are still alive, this issue could also be solved by clearing all references to the RootVisual object, but that is easier said than done.
I was not able to reproduce the issue with a simple UI that I can share. Probably this issue is caused by some unfortunate interactions between our UI Style library and AvalonDock - so the complex interactions of large systems.
Anyway, the fix seems low risk, so I hope you can accept it.